თავი 5. მონაცემების ამორჩევა ერთზე მეტი ცხრილიდან - ცხრილების გაერთიანება

       ქვეშეკითხვაში პრედიკატის IN გამოყენება
      
         შეკითხვის პირობებში IN-ის გამოყენებისას ცხრილის სვეტის მნიშვნელობა დარდება IN-ში მითითებულ მნიშვნელობებთან. IN  სიაში ნებისმიერი გამოსახულება შეიძლება ქვეშეკითხვა იყოს. ქვეშეკითხვა შეიძლება გამოყენებულ იქნეს სიის ფორმირებისთვის. ამ შემთხვევაში გამოიყენება ცხრილური ქვეშეკითხვა, რომლის შედეგია ერთი სვეტი და n რაოდენობის სტრიქონი. მაგალითზე ვაჩვენოთ ქვეშეკითხვაში  IN-ის გამოყენება.
მაგალითი
ამორჩეულ იქნეს იმ სტუდნტების გვარები, რომლებმაც აირჩიეს მოდული ”ბურალტრული აღრიცხვა” ან ზოგადად შეკითხვა შეიძლება შემდეგნაირად ჩამოყალიბდეს - ამორჩეულ იქნეს იმ სტუდენტების გვარები, რომლებმაც აირჩიეს შეკითხვაში მითითებული მოდული.
დავაპროექტოთ ოთხი ცხრილი. პირველი შეიცავს ინფორმაციას მოდულის შესახებ, მეორე - მოდულში არსებული საგნების ნუსხას, მესამე - მონაცემებს სტუდენტის შესახებ, ხოლო მეოთხე კი - სტუნტების მიერ არჩეული საგნების შესახებ/ცხრ. 5/.

მოდული-tbmoduli        
საგანი-tbsagani
მოდულინომ                
საგანინომ
დასახელება
საგანიდასახელება

მოდულინომ
არჩეული საგნები-tbstusagani
სტუდენტი-tbstudenti
საგანინომ
სტუდენტინომ

გვარი

დაბთარიღი

დაბადგილი
ცხრილებში ჩაწერილი მონაცემები შემდეგია:
ცხრილი-tbmoduli
მოდულინომ
დასახელება
1
მენეჯმენტი
2
ბუღალტრული აღრიცხვა
ცხრილი-tbsagani
საგანინომ
საგანიდასახელება
მოდულინომ
1
2
3
ბუღალტრული აღრიცხვა
პროგრამა ორისი
მენეჯმენტის საფუძვლები        
2
2
1
ცხრილი- tbstusagani
საგანინომ
სტუდენტინომ
საგანინომ
სტუდენტინომ
1                
1        
1         
1        
       
1
2
3
4

2        
2        
3        
3        
3
5
6
7
8
9
ცხრილი-tbstudenti
                       
ნომერი
გვარი, სახელი
დაბადების თარიღი
დაბადების ადგილი

1
ლომია გივი
02.08.1995
ქუთაისი
2
ლომიძე ივანე
12.08.1995
თბილისი
3
ლომაძე გოგი
12.06.1995
ქუთაისი
4
ლოლაძე მზია
12.06.1995
ქუთაისი
5
პერტია ია
12.02.1995
ზესტაფონი
6
პირველი ია
12.02.1995
თბილისი
7
ლომაია გია
23.05.2007
ქუთაისი
8
ჩანადირი გიორგი
23.05.2007
ქუთაისი
9
თაბაგარი ია
26.02.2009
ქუთაისი
10
გოგია ნანა
11.02.2009
თბილისი
დასმული ამოცანა გადავწყვიტოთ ქვეშეკითხვით, სადაც შეკითხვის პირობებში გამოვიყენოთ პრედიკატი IN.
Access 2007-ში არსებული საშუალებებით:
  1. დავამყაროთ ცხრილებს შორის კავშირი;
  2. ქვეშეკითხვა და მთავარი შეკითხვა ცალცალკე დავაპროექტოთ;
  3. ამოვწეროთ სისტემის მიერ გენერირებული SQL ინსტრუქციები;
პროგრამაში ამოცანის პირობების გათვალისწინებით მოვახდინოთ ამ ინსტრუქციების დაკავშირება.
ცხრილებს შორის კავშირი შემდეგია/სურ. 15/:

სურ. 15. ცხრილებს შორის კავშირი
მთავარ შეკითხვაში მონაწილეობას სამი ცხრილი: tbsagani, tbstusagani, tbstudenti იღებს. პირობების გარეშე. ამ ცხრილების კავშირების გათვალისწინებით და შეკითხვის პირობის თანახმად, რომ საშედეგო ცხრილში გამოტანილი უნდა იქნეს  სტუდენტების მიერ არჩეული საგნები ანუ სტუდენტის გვარი, სახელი და საგნის დასახელება
მთავარი შეკითხვის ინსტრუქცია შემდეგი იქნება:
SELECT tbstudenti.gvari, tbsagani.saganidasaxeleba
FROM tbstudenti INNER JOIN (tbsagani INNER JOIN tbstusagani ON tbsagani.saganinom = tbstusagani.saganinom) ON tbstudenti.nomeri = tbstusagani.studentinom
ქვეშეკითხვაში ამორჩევა უნდა მოხდეს მოდულში არსებული საგნების, სტუდენტთა ნომრების გათვალისწინებით, ამიტომ ქვეშეკითხვაში მონაწილებს სამი ცხრილი: tbstusagani, tbmoduli, tbsagani. ამორჩევა უნდა განხორციელდეს მოდულის დასახელების მიხედვით. შეკითხვის ინსტრუქცია შემდეგი იქნება:
SELECT tbstusagani.studentinom
FROM tbmoduli INNER JOIN (tbsagani INNER JOIN tbstusagani ON tbsagani.saganinom = tbstusagani.saganinom) ON tbmoduli.modulinom = tbsagani.modulinim 
შეკითხვის ინსტრუქცია ზოგადობის გათვალისწინებით შემდეგია:
" SELECT tbstudenti.gvari, tbsagani.saganidasaxeleba AS [sagnis dasaxeleba]" & _
" FROM tbstudenti INNER JOIN (tbsagani INNER JOIN tbstusagani" & _
" ON tbsagani.saganinom = tbstusagani.saganinom) ON tbstudenti.nomeri = tbstusagani.studentinom" & _
" WHERE tbstudenti.nomeri IN" & _
" (SELECT tbstusagani.studentinom" & _
" FROM tbmoduli INNER JOIN (tbsagani INNER JOIN tbstusagani" & _
" ON tbsagani.saganinom = tbstusagani.saganinom) ON tbmoduli.modulinom = tbsagani.modulinim" & _
" WHERE tbmoduli.dasaxeleba= '" & V1 & "')"
მოდულის დასახელება იწერება ფორმაზე დატანილ ველში, რომლის სახელია  V1. პროგრამის ტექსტი, რომლის საშუალებითაც ფორმაზე დატანილ ListBox-ზე გამოიტანება 
ამორჩევის შედეგი შემდეგია:
Private Sub Rsek_Click()
Dim kit As String
Me.Lsia.RowSource = "" 
’ფორმაზე დატანილია ListBox სახელით Lsia
kit = " SELECT tbstudenti.gvari, tbsagani.saganidasaxeleba AS [sagnis dasaxeleba]" & _
' ListBox-ში  სტუდენტის გვარის და საგნის დასახელების გამოტანა
" FROM tbstudenti INNER JOIN (tbsagani INNER JOIN tbstusagani" & _
" ON tbsagani.saganinom = tbstusagani.saganinom) ON tbstudenti.nomeri = tbstusagani.studentinom" & _
" WHERE tbstudenti.nomeri IN" & _
’პირობაში ნაჩვენებია, რომ ამორჩეულ იქნენ ის სტუდენტები რომელთა  ნომერი ტოლია  IN  პრედიკატის შემდეგ დაწერილი გამოსახულების. ეს გამოსახულება კი მიირება ქვეშეკითხვით 
" (SELECT tbstusagani.studentinom" & _
" FROM tbmoduli INNER JOIN (tbsagani INNER JOIN tbstusagani" & _
" ON tbsagani.saganinom = tbstusagani.saganinom) ON tbmoduli.modulinom = tbsagani.modulinim" & _
" WHERE tbmoduli.dasaxeleba= '" & V1 & "')"
With Me.Lsia
.ColumnHeads = True
.ColumnCount = 2
.ColumnWidths = "2in;5in;"
.RowSourceType = "Table/Query"
.RowSource = kit
End With
Me.Lsedegi.Caption = "modulSi  " & V1 & "  studentebis mier arCeuli iqna Semdegi sagnebi:"
End Select
End Sub
პროგრამით ამორჩეულ იქნა სტუდენტები, რომლებმაც აირჩიეს მოდულის ”ბუღალტრული აღრიცხვა” საგნები საგნების დასახელებებისა და სტუდენტთა გვარების ჩვენებით/სურ. 16/:

სურ. 16. ამორჩევის შედეგი